package com.nlina.qiniu_bigwork.controller;

import com.nlina.qiniu_bigwork.config.QiniuConfig;
import com.nlina.qiniu_bigwork.service.QiniuService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.Map;

/**
 * 测试控制器，用于诊断问题
 * 提供各种测试接口，验证七牛云配置和功能是否正常
 * 主要用于开发和调试阶段，不应在生产环境中使用
 */
@RestController
@RequestMapping("/test")
public class TestController {
    
    private static final Logger log = LoggerFactory.getLogger(TestController.class);
    
    /**
     * 七牛云配置对象，包含AK、SK等敏感信息
     */
    @Autowired
    private QiniuConfig qiniuConfig;
    
    /**
     * 七牛云服务，用于执行实际操作
     */
    @Autowired
    private QiniuService qiniuService;
    
    /**
     * 简单测试接口
     * 用于验证服务是否正常运行
     * 
     * @return 包含测试消息的HTTP 200响应
     */
    @GetMapping("/hello")
    public ResponseEntity<Map<String, Object>> hello() {
        return ResponseEntity.ok(Map.of(
            "message", "Hello, 七牛云盘系统!",
            "status", "OK"
        ));
    }
    
    /**
     * 测试配置接口
     * 返回当前加载的七牛云配置信息（不包含敏感字段）
     * 
     * @return 包含非敏感配置信息的HTTP 200响应
     */
    @GetMapping("/config")
    public ResponseEntity<Map<String, Object>> testConfig() {
        Map<String, Object> result = new HashMap<>();
        result.put("appName", "七牛云盘系统");
        result.put("bucket", qiniuConfig.getBucket());
        result.put("domain", qiniuConfig.getDomain());
        // 不返回敏感信息
        result.put("accessKeyValid", qiniuConfig.getAccessKey() != null && !qiniuConfig.getAccessKey().isEmpty());
        result.put("secretKeyValid", qiniuConfig.getSecretKey() != null && !qiniuConfig.getSecretKey().isEmpty());
        return ResponseEntity.ok(result);
    }
    
    /**
     * 测试上传文件接口
     * 执行实际的文件上传操作，验证七牛云上传功能是否正常
     * 
     * @param file 要上传的测试文件
     * @return 包含上传结果和详细信息的HTTP响应
     */
    @PostMapping("/upload")
    public ResponseEntity<Map<String, Object>> testUpload(@RequestParam("file") MultipartFile file) {
        Map<String, Object> result = new HashMap<>();
        
        try {
            log.info("测试上传文件: {}, 大小: {}", file.getOriginalFilename(), file.getSize());
            
            if (file.isEmpty()) {
                result.put("success", false);
                result.put("message", "上传文件为空");
                return ResponseEntity.badRequest().body(result);
            }
            
            // 简单验证文件
            result.put("fileName", file.getOriginalFilename());
            result.put("fileSize", file.getSize());
            result.put("contentType", file.getContentType());
            
            // 获取上传凭证
            String token = qiniuService.getUploadToken();
            result.put("uploadToken", token != null ? "已获取上传凭证" : "获取上传凭证失败");
            
            // 执行上传
            String testFileName = "test_" + System.currentTimeMillis() + "_" + file.getOriginalFilename();
            String url = qiniuService.uploadFile(file, testFileName);
            
            result.put("success", url != null);
            result.put("url", url);
            result.put("message", url != null ? "上传成功" : "上传失败");
            
            return ResponseEntity.ok(result);
        } catch (Exception e) {
            log.error("测试上传失败", e);
            result.put("success", false);
            result.put("message", "上传异常: " + e.getMessage());
            result.put("exceptionType", e.getClass().getName());
            result.put("exceptionStack", e.getStackTrace()[0].toString());
            return ResponseEntity.internalServerError().body(result);
        }
    }
} 